import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import '../config/SystemConfig.dart';
import 'dart:convert';
import '../util/UserInfo.dart';

class FindPage extends StatefulWidget {
  FindPage({Key key}) : super(key: key);
  @override
  _FindPageState createState() => _FindPageState();
}

class _FindPageState extends State<FindPage> {
  //定义一个顶部的用户图像组件
  var _scrollController = ScrollController();
  var _showBackTop = false;

  @override
  void dispose() {
    // 记得销毁对象
    _scrollController.dispose();
    super.dispose();
  }

  //当前登录用户
  Map userInfo;

  //定义组件集合
  List<Widget> _widgetList = [];
  //定义数据集合
  List _dataList = [];

//页面在初始化时自动加载的一个方法
 
  void initState() {
    super.initState();
    this._init();
    // 对 scrollController 进行监听
    _scrollController.addListener(() {
      // _scrollController.position.pixels 获取当前滚动部件滚动的距离
      // 当滚动距离大于 800 之后，显示回到顶部按钮
      setState(() => _showBackTop = _scrollController.position.pixels >= 800);
    });
  }

  //业务初始化方法，初始化所有的数据和组件
 //初始化所有的数据和组件
   void _init() async {
    Map tempUserInfo = await UserInfo.getUserInfo();
    setState(() {
      this.userInfo = tempUserInfo;
    });
    //查询最新内容
    _queryList();
  }

  //查询数据
  void _queryList() async {
    //请求后台 //SystemConfig.BASE_URL+相对地址，调用后台相关的接口
    String api = SystemConfig.BASE_URL + '/content/listTopCommentContent';
    //  print(api + "====+++++++++++++++");
    //先拿数据，
    Response response = await Dio().get(api);
    print(response.toString());
    Map result = json.decode(response.toString());
    if (response.statusCode == 200 && result != null && result['success']) {
      //从response中通过json解码获得数据数组data，并将data数组直接赋值给类的局部私有变量_dataList

      this._dataList = result['data'];

      this._refreshListViewWidget();
    } else {
      Fluttertoast.showToast(
          msg: result['message'],
          toastLength: Toast.LENGTH_LONG,
          gravity: ToastGravity.BOTTOM,
          textColor: Colors.white,
          backgroundColor: Colors.pinkAccent);
    }
  }

  void _onRefresh() async {
    this._queryList();
  }

  // 将数据集合和组件集合双向绑定绑定组件,
  void _refreshListViewWidget() {
    setState(() {
      //实现双向绑定和状态保存
      this._widgetList = this._buildListViewWigetList();
    });
  }

  List<Widget> _buildListViewWigetList() {
    //返回listview组件列表数组
    List<Widget> listViewWidgetList = [];
    //将顶部头像区域加入到集合
    listViewWidgetList.add(this._buildUserTopImage());
    //图文内容区域绑定
    //_dataList对应是返回的data数据，通过map方法，实现迭代（遍历），将每一条图文数据传给——buildItem，实现数据绑定
    List<Widget> dataList = this._dataList.map((item) {
      //迭代器
      return _buildItem(item);
    }).toList();

    //最终获得body区域所有的Widget,并将放到listViewWidgetList
    listViewWidgetList.addAll(dataList);
    return listViewWidgetList;
  }
  
   

  Widget _buildItem(Map item) {
    return Container(
      color: Colors.blue[50],
      padding: EdgeInsets.all(15.0),

      //内容项整体是上下方向，采用列布局
      child: Column(
        //次轴对齐方式左对齐
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          //图像列布局
          Container(
            margin: EdgeInsets.only(bottom: 15.0),
            height: 50.0,
            child: Row(
              children: <Widget>[
                Container(
                  width: 50.0,
                  height: double.infinity, //高度自适应性强
                  //头像与昵称中有一些距离
                  margin: EdgeInsets.only(right: 15.0),
                  child: ClipOval(
                    child: item['imgUrl'] == null
                        ? Image.asset('images/2.jpg', fit: BoxFit.cover)
                        : Image.network(
                            SystemConfig.BASE_URL + item['headImgUrl'],
                            fit: BoxFit.cover), //三元表达式，另一种写法判断为空
                  ),
                ),
                Column(
                  //主轴上下平分空间
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  //次轴靠左
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Text(
                      item['nickname']==null?'未知昵称':item['nickname'],
                      style: TextStyle(
                          color: Colors.brown,
                          fontSize: 20.0,
                          fontWeight: FontWeight.bold),
                    ),
                    Text(
                       item['createDtMMDD']==null?'未知日期':item['createDtMMDD'],//判定发布内容的时间推算
                      style: TextStyle(color: Colors.grey, fontSize: 14.0),
                    )
                  ],
                ),
              ],
            ),
          ),

          //内容第二行布局
          Container(
            margin: EdgeInsets.only(bottom: 10.0),
            child: Text(
              item['content']==null?'':item['content'],
              style: TextStyle(fontSize: 16.0),
            ),
          ),
          //第三行布局
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Container(
                width: 220.0,
                height: 220.0,
                margin: EdgeInsets.only(bottom: 10.0),
                child: item['imgUrl'] == null
                    ? Image.asset('images/2.jpg', fit: BoxFit.cover)
                    : Image.network(SystemConfig.BASE_URL + item['imgUrl'],
                        fit: BoxFit.cover),
                
              ),
              //利用EXpanded来填充余下的空间
              Expanded(
                  flex: 1,
                  child: Center(
                      child: Container(
                    width: 60.0,
                    height: 60.0,
                    decoration:
                        new BoxDecoration(
                          border:
                              new Border.all(color: Colors.purple, width: 0.5),
                          color: Colors.blue[100],
                           borderRadius: BorderRadius.circular(30.0)),
                       
                    child: InkWell(
                      child:
                          Image.asset('images/pin_red.png', fit: BoxFit.cover),
                      // Image.network(SystemConfig.BASE_URL + item['imgUrl'],fit: BoxFit.cover),//弹框拼单成功
                      onTap: () {
                        Fluttertoast.showToast(
                            //登陆失败弹出小提示
                            msg: '拼单成功！！！',
                            backgroundColor: Colors.blue,
                            gravity: ToastGravity.CENTER, //
                            toastLength: Toast.LENGTH_SHORT, //提示时间很短
                            textColor: Colors.black87,
                            fontSize: 20.0);
                        
                      },
                    ),
                  )))
            ],
          )
        ],
      ),
  
    );
  }

  //自定义一个顶部的用户图像组件
  Widget _buildUserTopImage() {
    //顶部图像背景区域
    return Container(
      width: double.infinity,
      height: 220,
      child: Image.asset('images/d.jpg', fit: BoxFit.cover),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
    
      body: RefreshIndicator(
          //下拉刷新组件
          //ListView：可无限滚动的组件，可包含任意组件
          child: ListView(
            controller: _scrollController,
            children: this._widgetList,
          ),
          onRefresh: () async {
            this._onRefresh();
          }),
        floatingActionButton: _showBackTop // 当需要显示的时候展示按钮，不需要的时候隐藏，设置 null
          ? FloatingActionButton(
              onPressed: () {
                // scrollController 通过 animateTo 方法滚动到某个具体高度
                // duration 表示动画的时长，curve 表示动画的运行方式，flutter 在 Curves 提供了许多方式
                _scrollController.animateTo(0.0,
                    duration: Duration(milliseconds: 500),
                    curve: Curves.decelerate);
              },
              child: Icon(Icons.vertical_align_top),
            )
            :null,
          
 
    );
  }

}
